package model.siec.uczenie.funkcja.normalizacja;

import tools.Tablice;
import model.liczba.Liczba;
import model.liczba.LiczbaObsluga;

public class FunkcjaWejscieNormalizacjaSkalowanieLiniowe implements
		FunkcjaWejscieNormalizacja {

	Liczba daneMin;
	Liczba daneMax;
	
	public FunkcjaWejscieNormalizacjaSkalowanieLiniowe(
		Liczba[] wzorceUczace, LiczbaObsluga liczbaObsluga) 
	{
		daneMin = Tablice.znajdzMin(wzorceUczace, liczbaObsluga);
		daneMax = Tablice.znajdzMax(wzorceUczace, liczbaObsluga);
	}

	@Override
	public Liczba normalizuj(LiczbaObsluga liczbaObsluga, Liczba argument) {
		Liczba wynik = argument;
		if (daneMin.compareTo(daneMax) == 0 ) {
			if (argument.compareTo(daneMin) == 0)
				wynik = liczbaObsluga.getZERO();
		} else { 
			Liczba przedzialDlugosc = liczbaObsluga.subtract(daneMax, daneMin);
			wynik = liczbaObsluga.subtract(argument, daneMin);
			wynik = liczbaObsluga.divide(wynik, przedzialDlugosc);
			wynik = liczbaObsluga.multiply(wynik, liczbaObsluga.create(2));
			wynik = liczbaObsluga.subtract(wynik, liczbaObsluga.getJEDEN());
		}
		if (argument.compareTo(daneMax) > 0 ) {
			wynik = liczbaObsluga.getJEDEN();
		} else if (argument.compareTo(daneMin) < 0) {
			wynik = liczbaObsluga.getMINUSJEDEN();
		}
		return wynik;
	}

}
